"""
一、下标：
下标又叫索引，固定的写法，必须要加[]，中括号里写下标

正常的正着取下标是从左往右，第一个下标是0；
倒着取的下标是从右往左，第一个是下标是-1；没有-0，-0就相当于正数的0。
下标有两种取法：
    1、正着取，从左往右。如：0、1、2、3、4……
    2、倒着取，从右往左。如：-1、-2、-3、-4……
"""

# 1、正着取，从左往右
# list = "abcdefg"
# print(list[0])  # 取第一个值---a
# print(list[1])  # 取第二个值---glo_num
# print(list[2])  # 取第三个值---c
# print(list[3])  # 取第四个值---d……以此类推
#
# # 2、倒着取，从右往左
# print(list[-0])  # 没有-0这么一说，所以取第一个值---a
# print(list[-1])  # 取倒数第一个值---g
# print(list[-2])  # 取倒数第二个值---f
# print(list[-3])  # 取倒数第三个值---e……以此类推

"""
二、切片：
切片是用于提取序列中也定部分的方法，可以通过指定起始索引和结束索引来获取序列的子集。
    序列：内容连续、有序、支持下标索引的一类数据都可以成为序列
        如：列表[]、元组()、字符串""等等
切片顾头不顾尾：包含开始，不包含结束；如：[1,2,3,4,5]，切片取1:3,从0开始数，取的内容就是：2,3；
整体的格式为：序列[起始:结束:步长]
    起始可以省略不写，省略的话算是从头开始
    结束可以省略不写，省略的话算是到尾结束
    步长可以省略不写，省略的话算是步长为1；

步长的取值为：1：顺着取；2：隔一个取一个；3：隔两个取一个；4：隔三个取一个…………
步长可以为负数，如：-1、-2、-3……
"""
# # 1、列表切片
# list1 = [1, 2, 3, 4, 5, 6]
# print(list1[2:5])       # [3, 4, 5]  只有切片，没有步长，取2~5的内容，包含开始不包含结束。
# print(list1[2:5:1])     # [3, 4, 5]  有切片，有步长，步长为1，所以从前往后顺着取，同样，包含开始不包含结束。
# print(list1[2:2])       # [空]  开始和结束为同一个数，没有数值可取(2的头是3，2的尾是2，顾头不顾尾，没有数可取)
#
# # 2、字符串切片
# str1 = "abcdefg"
# print(str1[:5])  # abcde  开始不写，默认从头开始算起，一直到尾巴前一个
# print(str1[2:])  # cdefg  结尾不写，从开始，默认一直到结尾
# print(str1[:])  # abcdefg  开始结束都不写，默认取全部的数值

# 3、元组切片
tuple1 = (1, 2, 3, 4, 5, 6)
print(tuple1[::2])  # (1, 3, 5)  步长为2，从头开始取，隔一个取一个
print(tuple1[:4:2])  # (1, 3)  没有开始，那就从头开始结束为4，取数值1，2，,3，,4；由于步长为2，所以从取数值1，3

print(tuple1[:-2])  # (1, 2, 3, 4) 没有开始，结束为-2。-2相当于数据的5，所以取到倒数第二的前一个
print(tuple1[::-1])  # (6, 5, 4, 3, 2, 1)  步长为负数，从后往前取，步数为正数，从前往后取
print(tuple1[5:2:-1])  # (6, 5, 4) 开始5对应数值6，结束2对应数值3(但是不包括结束位置的元素)，所以数值为4，由于步长为-1，故从右往左取值；
print(tuple1[2:5:-1])  # (空) 开始是2，由于步长是-1，所以要往左找，由于往左找不到结束位置，所以取值为空，
print(tuple1[3:0:-1])  # (4, 3, 2) 开始是3，对应数值为4，由于步长是-1，所以要往左边找，结束是0，取值为2，故结果为4，3，2
print(tuple1[5:2])  # （空），由于起始位置比结束位置大，切片无法前进，找不到数值，故列表为空
